package edu.javaclub;

/**
 * 021. 亲和数
 * 令 d(n)表示自然数 n 所有真因子(除开数 n 身的所有因子)的和，如果 d(a)=b 且 d(b)=a，其
 * 中 a≠b，那么 a 与 b 便为亲和数对，其中的每个数称为亲和数。
 * 例如：
 * 220 的真因子为 1, 2, 4, 5, 10, 11, 20, 22, 44, 55，110，所以 d(220)=284
 * 284 的真因子为 1,2, 4, 71、142，所以 d(284)=220，因此 220、284 为亲和数。
 * 求 10000 以下所有亲和数的和。
 * 答案：31626
 */
public class work021 {
    public static int yinSum(int n){
        if(n<=1){
            return 0;
        }
        int ans=0;
        int m=(int)Math.sqrt(n);
        for(int i=2;i<=m;i++){
            if(n%i==0){
                ans+=i+n/i;
            }
        }
        return ans+1;
    }
    public static void main(String[] args) {
        int []Num=new int[20];
        int sum=0;
        for(int i=2,j=0;i<=10000;i++){
            int k=yinSum(i);
            int v=yinSum(k);
            if(i==v&&i!=k){
                Num[j]=i;
               j++;
               Num[j]=v;
            }
        }
        for(int i=0;i<Num.length;i++){
            if(Num[i]!=0){
                sum+=Num[i];
                if(Num[i]==Num[i+1]){
                    i++;
                }
            }
        }
        System.out.println(sum);
    }
}
